#pragma once

class Vector3 : public D3DXVECTOR3
{
	// Constructors

	public:

		Vector3() : D3DXVECTOR3()
		{
		}

		Vector3(D3DXVECTOR3 &v3) 
		{ 
			x = v3.x; 
			y = v3.y; 
			z = v3.z; 
		}

		Vector3(const float xCoord, const float yCoord, const float zCoord)
		{
			this->x = xCoord;
			this->y = yCoord;
			this->z = zCoord;
		}

	// Public Methods

	public:

		inline float Length()
		{
			return D3DXVec3Length(this);
		}

		inline Vector3 *Normalize()
		{
			return static_cast<Vector3 *>(D3DXVec3Normalize(this, this));
		}

		inline float Dot(const Vector3 &vector3)
		{
			return D3DXVec3Dot(this, &vector3);
		}

		inline Vector3 Cross(const Vector3 &vector3)
		{
			Vector3 out;

			D3DXVec3Cross(&out, this, &vector3);

			return out;
		}
};